#include<iostream>
using namespace std;

struct Node{//结点的结构
    int data;
    Node *next;
};

class List{
private:
    Node* head;
public:
//你的代码将被嵌在这里

    List()
    {
        head=new Node;
        head->data=0;
        head->next=NULL;
    }
    void Listinsert(int n,int k)
    {
        Node *p=head;
        while(n--)
        {
            p=p->next;
        }
        Node *q=new Node;
        q->next=p->next;
        q->data=k;
        p->next=q;
    }
    void Listdelete(int k)
    {
        Node*p=head->next;
        Node*q=head;
        while(p->data!=k)
        {
            q=p;
            p=p->next;
        }
        q->next=p->next;
        delete p;
    }
    void Listprint()
    {
        Node*p=head->next;
        while(p)
        {
            printf("%d\n",p->data);
            p=p->next;
        }
    }
};
    int main()
    {
        List list;//定义一个空链表list
        list.Listinsert(0,10);//在第0个结点的后面插入值为10的新结点，也即在链表头部插入新的结点
        list.Listinsert(0,66);
        list.Listinsert(1,292);//在第1个结点的后面插入值为10的新结点
        list.Listdelete(66);//删除链表中第一个值为66的结点
        list.Listinsert(2,-2);//在第2个结点的后面插入值为-2的新结点
        list.Listinsert(1,3);//在第1个结点的后面插入值为3的新结点
        list.Listprint();//从头到尾输出链表结点的值，每个输出值占一行
        return 0;
    }
